Linux アプリをビルドして Snap Store にリリースする
通常の開発サイクルでは、
を使用してアプリをテストしますflutter run
コマンドラインで、
または、走るとデバッグIDE のオプション。デフォルトでは、
Flutter はデバッグアプリのバージョン。
準備の準備ができたら、リリースアプリのバージョン、 たとえばスナップストアに公開する、 このページが役に立ちます。
前提条件
Snap Store を構築して公開するには、 次のコンポーネント:
- UbuntuOS、18.04 LTS (またはそれ以上)
- スナップクラフトコマンドラインツール
- マルチパス仮想化マネージャーまたLXDコンテナマネージャー
ビルド環境をセットアップする
次の手順に従ってビルド環境をセットアップします。
スナップクラフトをインストールする
コマンドラインで次を実行します。
$ sudo snap install snapcraft --classic
マルチパスのインストール
コマンドラインでも次のコマンドを実行します。
$ sudo snap install multipass --classic
マルチパスが正しく動作するには、CPU へのアクセスが必要です 仮想化拡張機能。拡張子が正しくない場合は、 CPU アーキテクチャでは利用可能ですが、BIOS では有効になっていません。 またはアクセスできない(たとえば、 ネストされた仮想化を持たない仮想マシン)、 マルチパスは使用できなくなります。
次のエラーが表示された場合は、LXD を使用する必要があります。
launch failed: CPU does not support KVM extensions
LXDをインストールする
LXD をインストールするには、次のコマンドを使用します。
$ sudo snap install lxd
LXD は、 スナップビルドプロセス。インストールしたら、LXD を次のようにする必要があります。 使用できるように設定されています。デフォルトの回答が適切です ほとんどのユースケースに対応します。
$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, zfs, ceph) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty disk or partition? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=5GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
最初の実行では、LXD はソケットに接続できない場合があります。
An error occurred when trying to communicate with the 'LXD'
provider: cannot connect to the LXD socket
('/var/snap/lxd/common/lxd/unix.socket').
これは、ユーザー名を LXD に追加する必要があることを意味します (lxd) グループなので、セッションからログアウトして、再度ログインします。
$ sudo usermod -a -G lxd <your username>
スナップクラフトの概要
のsnapcraft
ツールは指示に基づいてスナップを構築します
にリストされているsnapcraft.yaml
ファイル。
スナップクラフトとその基本を理解するには
核となる概念については、をご覧ください。スナップドキュメントそしてそのスナップクラフトの紹介。
追加のリンクと情報は、次の場所にリストされています。
このページの一番下。
Flutter snapcraft.yaml の例
YAML ファイルを Flutter に配置します
下のプロジェクト<project root>/snap/snapcraft.yaml
。
(YAML ファイルは空白に敏感であることを忘れないでください。)
例えば:
name: super-cool-app
version: 0.1.0
summary: Super Cool App
description: Super Cool App that does everything!
confinement: strict
base: core18
grade: stable
slots:
dbus-super-cool-app: # adjust accordingly to your app name
interface: dbus
bus: session
name: org.bar.super_cool_app # adjust accordingly to your app name and
apps:
super-cool-app:
command: super_cool_app
extensions: [flutter-master] # Where "master" defines which Flutter channel to use for the build
plugs:
- network
slots:
- dbus-super-cool-app
parts:
super-cool-app:
source: .
plugin: flutter
flutter-target: lib/main.dart # The main entry-point file of the application
次のセクションでは、YAML ファイルのさまざまな部分について説明します。
メタデータ
このセクションは、snapcraft.yaml
ファイルの定義と
アプリケーションについて説明します。スナップバージョンは、
ビルドセクションから派生(採用)されています。
name: super-cool-app
version: 0.1.0
summary: Super Cool App
description: Super Cool App that does everything!
グレード、閉じ込め、およびベース
このセクションでは、スナップの構築方法を定義します。
confinement: strict
base: core18
grade: stable
- 学年
- スナップの品質を指定します。これは以下に関連します 公開ステップは後で行います。
- 監禁
- スナップにアクセスするシステム リソースのレベルを指定します
エンドユーザー システムに一度インストールされます。
厳密な制限により、アプリケーションのアクセスが制限されます。
特定のリソース (プラグインによって定義される)
app
セクション)。 - ベース
- スナップは自己完結型のアプリケーションとして設計されています。
したがって、独自のプライベートコアルートが必要です
として知られるファイルシステム
base
。のbase
キーワードで指定する 共通ライブラリの最小セットを提供するために使用されるバージョン、 そして、実行時にアプリケーションのルート ファイルシステムとしてマウントされます。
アプリ
このセクションでは、スナップ内に存在するアプリケーションを定義します。 スナップごとに 1 つ以上のアプリケーションが存在できます。この例 アプリケーションには super_cool_app が 1 つだけあります。
apps:
super-cool-app:
command: super_cool_app
extensions: [flutter-master]
- 指図
- スナップのルートを基準としたバイナリを指します。 スナップが呼び出されるときに実行されます。
- 拡張機能
- 1 つ以上の拡張子のリスト。スナップクラフト拡張機能
ライブラリのセットを公開できる再利用可能なコンポーネントです
ビルド時と実行時に簡単に実行できるツール、
開発者が特別な知識を持っている必要はありません
含まれているフレームワークの。の
flutter-master
拡張機能が公開する GTK 3 ライブラリを Flutter スナップに追加します。これにより、 設置面積が小さくなり、システムとの統合が向上します。の
flutter-master
拡張機能は flutter チャネルを設定します に3c20f47e-c02f-4207-9406-4ceb4d065400。を使用してアプリを構築したい場合は、dev
チャンネルは単に使用しますflutter-dev
拡大。 - プラグ
- システム インターフェイス用の 1 つ以上のプラグのリスト。 これらは必要な機能を提供するために必要です スナップが厳密に制限されている場合。この flutter スナップには次のものが必要です ネットワークへのアクセス。
- DBusインターフェース
- のDBusインターフェーススナップの方法を提供します
DBus 経由で通信します。 DBus を提供するスナップ
サービスは既知の DBus 名を持つスロットを宣言します
そしてどのバスを使うのか。コミュニケーションをとりたいスナップ
提供するスナップのサービスでプラグを宣言します
スナップを提供します。 snap 宣言は次のとおりであることに注意してください。
スナップ ストア経由でスナップを配信するために必要です
そして、このよく知られた DBus 名を主張します (単に
ストアにアクセスして手動レビューをリクエストし、
査読者が検討します)。
提供スナップがインストールされると、snapd は を許可するセキュリティ ポリシーを生成します。 指定された環境で既知の DBus 名をリッスンします。 バス。システム バスが指定されている場合、snapd はまた、 「root」が所有できるようにする DBus バス ポリシーを生成する 名前と通信するユーザー サービス。非スナッププロセスは次のことを許可されます。 提供するスナップと通信します。 従来の権限チェック。その他(消費) スナップは、提供されているものとのみ通信する可能性があります。 スナップバイ スナップのインターフェースを接続します。
dbus-super-cool-app: # adjust accordingly to your app name
interface: dbus
bus: session
name: dev.site.super_cool_app
部品
このセクションでは、以下に必要なソースを定義します。 スナップを組み立てます。
パーツはダウンロードして、プラグインを使用して自動的に構築できます。 拡張機能と同様に、snapcraft ではさまざまなプラグインを使用できます (Python、C、Java、Ruby など) 構築プロセス。 Snapcraft には特別なプラグインもいくつかあります。
- なしプラグイン
- アクションは実行されず、実際のビルドプロセスは 手動オーバーライドを使用して処理されます。
- はためくプラグイン
- 必要な Flutter SDK ツールを提供するので、 手動でダウンロードしてセットアップすることなく使用できます ビルドツール。
parts:
super-cool-app:
source: .
plugin: flutter
flutter-target: lib/main.dart # The main entry-point file of the application
デスクトップファイルとアイコン
デスクトップエントリファイルはアプリケーションを追加するために使用されます デスクトップメニューへ。これらのファイルは名前と アプリケーションのアイコン、アプリケーションが属するカテゴリ、 関連する検索キーワードなど。これらのファイルには、 拡張子 .desktop を付けて、XDG デスクトップ エントリに従ってください。 仕様バージョン 1.1。
Flutter super-cool-app.desktop の例
Flutter プロジェクトに .desktop ファイルを配置します。
下<project root>/snap/gui/super-cool-app.desktop
。
知らせ: アイコンと .desktop ファイル名は yaml ファイル内のアプリ名と同じです。
例えば:
[Desktop Entry]
Name=Super Cool App
Comment=Super Cool App that does everything
Exec=super-cool-app
Icon=${SNAP}/meta/gui/super-cool-app.png # replace name to your app name
Terminal=false
Type=Application
Categories=Education; #adjust accordingly your snap category
拡張子が .png のアイコンを Flutter に配置します
下のプロジェクト<project root>/snap/gui/super-cool-app.png
。
スナップを構築する
一度68dd655c-d8a6-447e-9b63-81db51513bd2ファイルが完成しました、
走るsnapcraft
ルートディレクトリから次のように
プロジェクトの。
マルチパス VM バックエンドを使用するには:
$ snapcraft
LXD コンテナ バックエンドを使用するには:
$ snapcraft --use-lxd
公開
スナップが構築されると、<name>.snap
ファイル
ルートプロジェクトディレクトリにあります。これでスナップを公開できるようになりました。
このプロセスは以下で構成されます。
- 開発者アカウントを作成するにはスナップクラフト.io、 もし、あんたが まだそうしていません。
- アプリ名を登録します。登録ができる
Snap Store Web UI ポータルを使用するか、
コマンドラインは次のようになります。
$ snapcraft login $ snapcraft register
- アプリをリリースします。次のセクションを読んだ後
Snap Store チャネルの選択について学ぶには、
スナップをストアにプッシュします。
$ snapcraft upload --release=<channel> <file>.snap
スナップストアチャネル
Snap Store はチャネルを使用して以下を区別します。 スナップのさまざまなバージョン。
のsnapcraft upload
コマンドはスナップファイルをアップロードします
店舗。ただし、このコマンドを実行する前に、
さまざまなリリース チャネルについて学ぶ必要があります。
各チャンネルは 3 つのコンポーネントで構成されます。
- 追跡
- すべてのスナップには、latest というデフォルトのトラックが必要です。 特に指定がない限り、これは暗黙のトラックです。
- 危険
- アプリケーションの準備状況を定義します。
スナップ ストアで使用されるリスク レベルは次のとおりです。
stable
、candidate
、beta
、 とedge
。 - ブランチ
- 有効期間の短いスナップの作成を許可します バグ修正をテストするシーケンス。
Snap Storeの自動レビュー
Snap Store は、以下に対していくつかの自動チェックを実行します。 あなたのスナップ。手動によるレビューもあるかもしれませんが、 スナップがどのように構築されたか、またスナップがあるかどうかによって異なります。 特定のセキュリティ上の懸念。チェックに合格した場合 エラーがなければ、スナップはストアで利用できるようになります。
追加のリソース
詳細については、次のリンクからご覧ください。スナップクラフト.ioサイト:
- チャンネル
- 環境変数
- インターフェース管理
- パーツ環境変数
- スナップストアへのリリース
- スナップクラフト拡張機能
- サポートされているプラグイン